/** 运行环境标识 */
type Env = 'production' | 'staging' | 'development';

/** 玩家引用信息 */
export interface PlayerRef {
  /** 神岛用户ID */
  id: number;
}

/** 参赛队伍信息 */
export interface Team {
  /** 队伍ID */
  id: number;
  /** 队伍名称 */
  name: string;
  /** 队伍徽标URL */
  logo: string;
  /** 队员列表 */
  players: PlayerRef[];
}

/** 比赛中的队伍快照（含比分） */
export interface MatchTeam {
  /** 队伍名称 */
  name: string;
  /** 队伍徽标URL */
  logo: string;
  /** 上场队员 */
  players: PlayerRef[];
}

/** 比赛安排 */
export interface Match {
  /** 开始时间（Unix 秒时间戳） */
  startTime: number;
  /** A方队伍出场成员 */
  teamA: MatchTeam;
  /** B方队伍出场成员 */
  teamB: MatchTeam;
}

/** 比赛地图（赛道）信息 */
export interface MatchMap {
  /** 作品/地图内容ID */
  contentId: number;
  /** 地图名称 */
  name: string;
  /** 预览图 URL（可为代理/优化后的地址） */
  preview: string;
}

/** 晋级图中的队伍信息 */
export interface BracketTeam {
  /** 队伍名称 */
  name: string;
  /** 队伍徽标URL */
  logo: string;
}

/** 晋级图中的一轮比赛 */
export interface BracketRound {
  /** 轮次标题 */
  title: string;
  /** 本轮对阵的队伍 */
  teams: BracketTeam[];
}

/** 晋级图整体结构 */
export interface Bracket {
  /** 赛段标题列表 */
  stages: string[];
  /** 所有轮次 */
  rounds: BracketRound[];
}

/** 赛事配置 */
export interface GameCfg {
  /** 赛事LOGO URL */
  logo: string;
  /** 参赛队伍列表 */
  teams: Team[];
  /** 比赛安排列表 */
  matches: Match[];
  /** 比赛地图列表 */
  matchMaps: MatchMap[];
  /** 解说员ID列表 */
  commentators?: number[];
  /** 中控台成员ID列表 */
  operators?: number[];
  /** 晋级图信息 */
  bracket?: Bracket;
  /** 小窗播放器尺寸 */
  miniPlayer?: {
    /**
     * 宽
     */
    width: number;
    /**
     * 高
     */
    height: number;
  };
}

/** 历史回放项 */
export interface HistoryItem {
  /**
   * 标题
   */
  title: string;
  /**
   * 封面URL
   */
  cover: string;
  /**
   * 开始时间（Unix 秒时间戳）
   */
  startTime: number;
  /**
   * 回放/外链地址
   */
  url: string;
}

/** 即将开始项 */
export interface UpcomingItem {
  /**
   * 标题
   */
  title: string;
  /**
   * 封面URL
   */
  cover: string;
  /**
   * 开始时间（Unix 秒时间戳）
   */
  startTime: number;
  /**
   * 详情/跳转地址
   */
  url: string;
}

/** 直播数据主载体 */
export interface LivePayload {
  /**
   * 直播类型
   * - Game: 赛事直播
   * - Live: 普通直播
   */
  type: 'Game' | 'Live';
  /**
   * 运行环境
   */
  env: Env;
  /**
   * 直播标题
   */
  title: string;
  /**
   * 直播描述
   */
  description: string;
  /**
   * 直播间ID
   */
  roomId: number;
  /**
   * 开始时间（Unix 秒时间戳）
   */
  startTime: number;
  /**
   * 结束时间（Unix 秒时间戳）
   */
  endTime: number;
  /**
   * 封面URL
   */
  cover: string;
  /**
   * 赛事配置
   */
  gameCfg?: GameCfg;
  /**
   * 历史回放列表
   */
  history?: HistoryItem[];
  /**
   * 即将开始列表
   */
  upcoming?: UpcomingItem[];
}

// ---- LiveUpdater 相关共享类型 ----
export type LiveUpdatePlayer = {
  id: number;
  /** 可选：实时指标（例如积分、得分等） */
  score?: number;
  /** 可选：实时血量 */
  hp?: number;
  /** 可选：实时 KDA */
  kda?: string;
};

export type LiveUpdateSide = {
  score: number;
  players: LiveUpdatePlayer[];
};

/**
 * 高光时刻
 * - reason: 高光原因/提示文案
 */
export interface LiveUpdateHighlight {
  /** 高光原因/提示文案 */
  reason: string;
  /** 关联队伍，平台侧会高亮该队伍logo */
  teamNames?: string[];
  /** 关联选手，平台侧会高亮该选手 */
  playerIds?: number[];
  /** 是否要求平台立刻放大 live_mini 窗口，平台侧需要开启 live_mini 窗口才生效 */
  immediate?: boolean;
}

/** 弹幕消息 */
export interface LiveDanmaku {
  /** 文本内容 */
  text: string;
}

export type LiveUpdatePayload = {
  /** 比赛开始时间（Unix 秒） */
  startTime: number;
  teamA: LiveUpdateSide;
  teamB: LiveUpdateSide;
  /** 高光时刻（仅一个） */
  highlight?: LiveUpdateHighlight;
  /** 弹幕（可选，单条） */
  danmaku?: LiveDanmaku;
};

// 支持批量：与 LiveEvent 的赛程数组相对应
export type LiveUpdatePayloadArray = LiveUpdatePayload[];

export interface LiveUpdaterOptions {
  /** 目标接口地址，默认为 box3lab 提供的 set_redis_value */
  endpoint?: string;
  /** Redis 键名（必填） */
  key: string;
  /** 附加请求头（可选） */
  headers?: Record<string, string>;
  /** 最大重试次数（可选，默认 0） */
  maxRetries?: number;
  /** 首次重试延迟毫秒（可选，默认 500） */
  retryDelayMs?: number;
}
